package cn.qiao.lock;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

/**
 * desc:
 *
 * @author qiao
 * @date 2024年04月02日 21:09
 */
public class Common {
    public static String defaultFile = "H:\\Project\\test\\test.txt";
    public static void lock(Execute execute){

        RandomAccessFile file = null;
        FileChannel channel = null;
        FileLock lock1 = null;

        try {
            // 打开文件
            file = new RandomAccessFile(defaultFile, "rw");
            channel = file.getChannel();

            // 尝试获取文件锁第一次
            lock1 = channel.tryLock();
            if (lock1 != null) {
                // 第一次锁定成功
                execute.execute();
            } else {
                // 第一次锁定失败
                System.out.println("文件已被其他进程锁定");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (lock1 != null) {
                    lock1.release(); // 释放第一个文件锁
                }
                if (channel != null) {
                    channel.close(); // 关闭文件通道
                }
                if (file != null) {
                    file.close(); // 关闭文件
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }



}
